<?php
/*
 * Copyright 2009 Upskill.com.br
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
// Importando Acoes
require_once("AcaoAbstrata.php");
require_once("AcaoProfessorForm.php");
require_once("AcaoListaProfessor.php");
require_once("AcaoInsereProfessor.php");

// Instanciando o objeto de controle
$objControlador = new Controlador();
$objControlador->run();

// Classe Controlador
class Controlador{

	// Atributo para mapear as acoes
	private $acoes;
	
	private $paginaErroPadrao = "../paginas/erro.php"; 
	
	public function run(){
		
		if(isset($_REQUEST["do"])){	
			try {
			    $chave = $_REQUEST["do"];
			    $acao = $this->acoes[$chave];
			
			    // Se nao encontrar uma acao no array lanca uma exception
			    if (!isset($acao)){
			       throw new Exception();
			    }
				
			    $acao->executar(); // Polimorfismo!
				$pagina = $acao->getPaginaSucesso();	
			}
			catch (Exception $e){
				echo $this->interpretaPagina($this->paginaErroPadrao);
				$pagina = $acao->getPaginaErro();	
			}
			
			echo $this->interpretaPagina($pagina);
			
		}
		else{
			echo $this->interpretaPagina($this->paginaErroPadrao);
		}
			
	}
	
	private function interpretaPagina($pagina) {
		// Mandando o interpretador executar o arquivo
		// Sem enviar para o navegador
		ob_start();
		include_once $pagina;
		// ob_get_contents = interpretanto o buffer
		$conteudo = ob_get_contents();
		ob_end_clean();
		return $conteudo;
	}

	public function __construct(){
		
		$this->acoes = array();
		
		// Instanciando Acoes
		$acaoProfessorForm = new AcaoProfessorForm();
		$acaoProfessorForm->setPaginaSucesso("../paginas/professorForm.php");
		$acaoProfessorForm->setPaginaErro("../paginas/erro.php");
		$this->acoes["formProfessor"] = $acaoProfessorForm;
		
		$acaoListaProfessor = new AcaoListaProfessor();
		$acaoListaProfessor->setPaginaSucesso("../paginas/resultadoProfessor.php");
		$acaoListaProfessor->setPaginaErro("../paginas/erro.php");
		$this->acoes["listaProfessor"] = $acaoListaProfessor;
		
		
		$acaoInsereProfessor = new AcaoInsereProfessor();
		$acaoInsereProfessor->setPaginaSucesso("../paginas/resultadoProfessor.php");
		$acaoInsereProfessor->setPaginaErro("../paginas/erro.php");
		$this->acoes["insereProfessor"] = $acaoInsereProfessor;
	}
		
}


?>